<?php
namespace GRH\Model\Table;

use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\Adapter\Adapter;
use Zend\Db\ResultSet\ResultSet;

use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Where;
use Zend\Db\Sql\Expression;
use Zend\Db\Sql\Select;

use GRH\Model\Disponibilite;

class DisponibiliteTable extends AbstractTableGateway
{
    protected $table = 'grh_planning_type';
    
    /**
     * Constructeur
     * @param \Zend\Db\Adapter\Adapter $adapter
     */
    public function __construct(Adapter $adapter)
    {
        $this->adapter = $adapter;
        $this->resultSetPrototype = new ResultSet();
        $this->resultSetPrototype->setArrayObjectPrototype(new Disponibilite());
        $this->initialize();
    }
    
    /**
     * Tous les Disponibilités
     * 
     * @return type
     */
    public function getAll()
    {
        return $this->select();
    }
    
    /**
     * Disponibilité pour un employé donné
     * 
     * @param type $employe_id
     * @return type
     * @throws \Exception
     */
    public function getByEmploye($employe_id)
    {
        $employe_id = (int)$employe_id;
        $row = $this->select(array('employe_id' => $employe_id))->current();
        if(!$row)
            throw new \Exception("DisponibiliteTable::getByEmploye => Impossible de trouver la Disponibilité pour l'employé #$employe_id");
    
        return $row;
    }
    
    /**
     * Récupérer une disponibilité données
     * 
     * @param type $id
     * @return type
     * @throws \Exception
     */
    public function get($id)
    {
        $id = (int)$id;
        $row = $this->select(array('planning_type_id' => $id))->current();
        if(!$row)
            throw new \Exception("DisponibiliteTable::get => Impossible de trouver la Disponibilité #$id");
        
        return $row;
    }
    
    /**
     * Enregistrer une Disponibilité
     * 
     * @param \GRH\Model\Disponibilite $dispo
     * @return type
     * @throws \Exception
     */
    public function save(Disponibilite $dispo)
    {
        $data = array(
            'employe_id' => $dispo->employe_id,
            'lundi' => $dispo->lundi,
            'lundi_entree' => $dispo->lundi_entree,
            'lundi_sortie' => $dispo->lundi_sortie,
            'mardi' => $dispo->mardi,
            'mardi_entree' => $dispo->mardi_entree,
            'mardi_sortie' => $dispo->mardi_sortie,
            'mercredi' => $dispo->mercredi,
            'mercredi_entree' => $dispo->mercredi_entree,
            'mercredi_sortie' => $dispo->mercredi_sortie,
            'jeudi' => $dispo->jeudi,
            'jeudi_entree' => $dispo->jeudi_entree,
            'jeudi_sortie' => $dispo->jeudi_sortie,
            'vendredi' => $dispo->vendredi,
            'vendredi_entree' => $dispo->vendredi_entree,
            'vendredi_sortie' => $dispo->vendredi_sortie,
            'samedi' => $dispo->samedi,
            'samedi_entree' => $dispo->samedi_entree,
            'samedi_sortie' => $dispo->samedi_sortie,
            'dimanche' => $dispo->dimanche,
            'dimanche_entree' => $dispo->dimanche_entree,
            'dimanche_sortie' => $dispo->dimanche_sortie,
        );
        $id = (int)$dispo->planning_type_id;
        if($id == 0)
            $this->insert($data);
        else
            if($this->get($id))
                $this->update ($data, array('planning_type_id' => $id));
            else
                throw new \Exception("DisponibiliteTable::save => Impossible de trouver la Disponibilite #$id");
            
        if($id == 0) return $this->lastInsertValue;
        else return $id;
    }
    
    /**
     * Effacer une Disponibilité
     * 
     * @param type $id
     */
    public function delete($id)
    {
        $this->delete(array('planning_type_id' => $id));
    }
}